const configs = {
    common: [
        {
            params: 'label',
            des: '当前列的表头名称',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'code',
            des: '必传，当前列每行数据展示值对应的code',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'type',
            des: '设置快捷列，声明对应列的单元格的类型，不同类型存在额外可配置属性，请参考下方说明; 列类型：插槽列/按钮列/图片列/时间戳转换列/标签列/可点击输入文本列/滑块列/浮窗提示列/文本列',
            type: 'String',
            values: '"slot" | "button" | "image" | "timeStamp" | "tag" | "clickInput" | "switch" | "popover" | "text"',
            defaultVal: '"text"',
        },
        {
            params: 'formatter',
            des: '该列单元格的值支持使用 formatter 方法进行自定义',
            type: 'Function(row, config)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'relateFieldCode',
            des: '若配置了该字段，该列单元格的值将根据对应查询框的选项值来进行格式化；例如：查询框中存在下拉框，列表数据仅存在下拉框选项的 key，此时可以将该字段的值配置为该下拉框控件的 code，则单元格内的内容会自动匹配下拉框控件选项的文案',
            type: 'String',
            values: '-',
            defaultVal: '-',
            version: 'v1.0.3',
        },
        {
            params: 'formatRequestConfig',
            des: '单元格的展示值支持使用 formatRequestConfig 配置来动态获取并根据单元格的值来匹配需要格式化的展示文案',
            type: 'Object',
            values: '-',
            defaultVal: '请查阅下方【formatRequestConfig 配置项】说明',
            details: [
                {
                    title: '配置项【formatRequestConfig】',
                    describes: [
                        '单元格的内容支持使用该配置来动态获取并匹配需要格式化的展示文案；例如：列表数据仅存在该单元格的编码 key，你需要获取字典配置然后根据该 key 来匹配展示的文案，此时你可以通过该配置很方便的达到理想的效果',
                    ],
                    configList: [
                        {
                            params: 'requestConfig',
                            des: '通过接口请求字典数据的配置；',
                            type: 'Object',
                            values: '-',
                            defaultVal: '支持的配置字段与 Table 组件的 requestConfig 基本一致',
                            version: 'v1.0.3',
                        },
                        {
                            params: 'optionProps',
                            des: '指定字典选项配置的键/值所对应的字段编码',
                            type: 'Object',
                            values: '-',
                            defaultVal: '{ label: \'label\', value: \'value\' }',
                            version: 'v1.0.3',
                        },
                    ],
                },
            ],
            version: 'v1.0.3',
        },
        {
            params: 'headerSlotCode',
            des: '对应列的表头插槽名称，配置该字段后，组件内部将根据该字段的值启用该列的表头插槽，然后你可以自定义对应列表头的内容',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'renderHeader',
            des: '列标题 Label 区域渲染使用的 Function',
            type: 'Function({ column, $index })',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'sortable',
            des: `对应列是否可以排序，如果设置为 true，并且 Table 传入了 requestConfig 接口请求配置，则自动启用该列的后台远程排序，如果需要修改接口的排序参数，可以通过 page-param-keys 来配置；
                                        如果设置为 true，但未配置 requestConfig，则使用前端排序的方式；
                                        如果设置为 "custom"，则代表用户希望自定义远程排序，可能需要监听 sib-table 的 sort-change 事件实现相关功能;`,
            type: 'String | Boolean',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'sortMethod',
            des: '指定数据按照哪个规则进行排序，仅当 sortable 设置为 true 且未配置 requestConfig 的时候有效。 应该如同 Array.sort 那样返回一个 Number；例如: (rowA, rowB) => rowA.age - rowB.age',
            type: 'Function(rowA, rowB)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'sortBy',
            des: `指定数据按照哪个属性进行排序，仅当 sortable 设置为 true 且未配置 requestConfig 和 sort-method 的时候有效。
                                        如果 sort-by 为数组，则先按照第 1 个属性排序，如果第 1 个相等，再按照第 2 个排序，以此类推，例如: ["age", "height"] 先按照年龄排序，如果年龄一样，则按照身高排序`,
            type: 'String | Array | Function(row, index)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'sortOrders',
            des: '数据在排序时所使用排序策略的轮转顺序，仅当 sortable 为 true 时有效。 需传入一个数组，随着用户点击表头，该列依次按照数组中元素的顺序进行排序',
            type: 'Array',
            values: '数组中的元素需为以下三者之一：ascending 表示升序，descending 表示降序，null 表示还原为原始顺序',
            defaultVal: '[\'ascending\', \'descending\', null]',
        },
        {
            params: 'sortOrderKeys',
            des: `该列在执行后台排序时，通过 sortOrderKeys 可以自定义接口请求参数内的排序顺序的值；仅当配置了 requestConfig 且 sortable 为 true 时有效;
                                        注意：该配置项与 pageParamKeys 配置项均可设置排序值，pageParamKeys 作用于整个列表，sortOrderKeys 作用于当前列，所以在排序当前列时，sortOrderKeys 优先级更高`,
            type: 'Object',
            values: '{ ascending: "asc", descending: "desc" }；即升序时传给后台的排序值为 "asc"，降序时传 "desc"',
            defaultVal: '{ ascending: "asc", descending: "desc" }',
        },
        {
            params: 'resizable',
            des: '若列表展示竖线边框，该字段可以控制是否支持拖动来调整列宽',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'showOverflowTooltip',
            des: '当内容过长被隐藏时显示 tooltip',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'align',
            des: '当前列单元格对齐方式',
            type: 'String',
            values: '"left" | "center" | "right"',
            defaultVal: '-',
        },
        {
            params: 'headerAlign',
            des: '当前列表头对齐方式， 若不设置该项，则使用表格的对齐方式',
            type: 'String',
            values: '"left" | "center" | "right"',
            defaultVal: '-',
        },
        {
            params: 'className',
            des: '当前列所有单元格的 className',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'labelClassName',
            des: '当前列的列头 label 的自定义类名',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'width',
            des: '当前列的宽度',
            type: 'String | Number',
            values: '-',
            defaultVal: '60',
        },
        {
            params: 'minWidth',
            des: '当前列的最小宽度',
            type: 'String | Number',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'columnKey',
            des: 'column 的 key， column 的 key， 如果需要使用 filter-change 事件，则需要此属性标识是哪个 column 的筛选条件',
            type: 'String',
            values: '-',
            defaultVal: '当前列配置的code',
        },
        {
            params: 'fixed',
            des: '当前列是否固定在左侧或者右侧；true 表示固定在左侧',
            type: 'String | Boolean',
            values: 'true | "left" | "right"',
            defaultVal: '-',
        },
        {
            params: 'filters',
            des: '数据过滤的选项， 数组格式，数组中的元素需要有 text 和 value 属性。 数组中的每个元素都需要有 text 和 value 属性',
            type: 'Array',
            values: '示例: [{text: string, value: string}]',
            defaultVal: '-',
        },
        {
            params: 'filterPlacement',
            des: '过滤弹出框的定位,与 Tooltip 的 placement 属性相同',
            type: 'String',
            // eslint-disable-next-line max-len
            values: '\'top\' | \'top-start\' | \'top-end\' | \'bottom\' | \'bottom-start\' | \'bottom-end\' | \'left\' | \'left-start\' | \'left-end\' | \'right\' | \'right-start\' | \'right-end\'',
            defaultVal: '"bottom"',
        },
        {
            params: 'filterMultiple',
            des: '数据过滤的选项是否多选',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'filterMethod',
            des: '数据过滤使用的方法， 如果是多选的筛选项，对每一条数据会执行多次，任意一次返回 true 就会显示。参数为 (value, row, column)',
            type: 'Function(value, row, column)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'filterValue',
            des: '选中的数据过滤项，如果需要自定义表头过滤的渲染方式，可能会需要此属性',
            type: 'Array',
            values: '-',
            defaultVal: '-',
        },
    ],
    image: [
        {
            params: 'imageWidth',
            des: '图片的宽度，单位 px',
            type: 'Number',
            values: '-',
            defaultVal: '50',
        },
        {
            params: 'imageHeight',
            des: '图片的高度，单位 px',
            type: 'Number',
            values: '-',
            defaultVal: '50',
        },
        {
            params: 'fit',
            des: '控制图片如何适应容器框，同原生 object-fit',
            type: 'String',
            values: '"fill" | "contain" | "cover" | "none" | "scale-down"',
            defaultVal: '"cover"',
        },
        {
            params: 'alt',
            des: '图片原生 alt',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'zIndex',
            des: '设置图片预览的 z-index',
            type: 'Number',
            values: '-',
            defaultVal: '2000',
        },
        {
            params: 'isPreview',
            des: '图片是否支持点击查看大图',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'previewFormatter',
            des: '若支持点击查看大图，则大图的地址支持使用 previewFormatter 方法进行自定义，需要 return 新增大图地址',
            type: 'Function(row, config)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'previewTeleported',
            des: '图片预览的 image-viewer 是否插入至 body 元素上',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'closeOnPressEscape',
            des: '是否可以通过按下 ESC 关闭 Image Viewer',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
    ],
    button: [
        {
            params: 'buttonText',
            des: '设置按钮的名称，不设置则取字段值',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'link',
            des: '是否为文字按钮',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'allowSelect',
            des: '当为文字按钮时，是否允许用户选中文本',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
            version: 'v1.0.9',
        },
        {
            params: 'buttonType',
            des: '按钮的类型',
            type: 'String',
            values: '"primary" | "success" | "warning" | "danger" | "info"',
            defaultVal: '"primary"',
        },
        {
            params: 'icon',
            des: 'elementPlus按钮图标的名称; 例如: "Search"',
            type: 'String',
            values: 'elementPlus内置图标',
            defaultVal: '-',
        },
        {
            params: 'size',
            des: '按钮的尺寸',
            type: 'String',
            values: '\'large\' | \'default\' | \'small\'',
            defaultVal: '"default"',
        },
        {
            params: 'disabled',
            des: '是否禁用',
            type: 'Function(row, config) | Boolean',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'filter',
            des: '筛选出满足条件的值作为按钮展示，其他值则作为文本展示，若未配置 filter 则全部作为按钮展示',
            type: 'Function(row)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'plain',
            des: '是否为朴素按钮',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'round',
            des: '是否为圆角按钮',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'circle',
            des: '是否为圆形按钮',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'handler',
            des: '点击按钮时触发的事件',
            type: 'Function(row, config)',
            values: '-',
            defaultVal: '-',
        },
    ],
    timeStamp: [
        {
            params: 'format',
            des: '格式化规则；规则示例: YYYY-MM-DD hh:mm:ss:S q 任意组合',
            type: 'String',
            values: 'S: 毫秒数, q: 当年季度',
            defaultVal: '"YYYY-DD-MM"',
        },
    ],
    tag: [
        {
            params: 'tagType',
            des: 'Tag 的类型；支持使用 Function，需要返回 Tag 的类型',
            type: 'String | Function(row, config)',
            values: '\'success\' | \'info\' | \'warning\' | \'danger\'',
            defaultVal: '-',
        },
        {
            params: 'color',
            des: 'Tag 的背景色；支持使用 Function，需要返回 Tag 的背景色',
            type: 'String | Function(row, config)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'disableTransitions',
            des: '是否禁用渐变动画',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'hit',
            des: '是否有边框描边',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'size',
            des: 'Tag 的尺寸',
            type: 'String',
            values: '\'large\' | \'default\' | \'small\'',
            defaultVal: '"default"',
        },
        {
            params: 'effect',
            des: 'Tag 的主题',
            type: 'String',
            values: '\'dark\' | \'light\' | \'plain\'',
            defaultVal: '"light"',
        },
        {
            params: 'round',
            des: '是否为圆形',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
    ],
    switch: [
        {
            params: 'disabled',
            des: '是否禁用',
            type: 'Boolean | Function(row, config)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'size',
            des: '滑块尺寸',
            type: 'String',
            values: '\'large\' | \'default\' | \'small\'',
            defaultVal: '"default"',
        },
        {
            params: 'switchWidth',
            des: '滑块的宽度',
            type: 'String | Number',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'inlinePrompt',
            des: '无论图标或文本是否显示在点内，只会呈现文本的第一个字符',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'activeIcon',
            des: 'switch 状态为 on 时所显示图标，设置此项会忽略 active-text',
            type: 'String | Component',
            values: 'elementPlus内置图标',
            defaultVal: '-',
        },
        {
            params: 'inactiveIcon',
            des: 'switch 状态为 off 时所显示图标，设置此项会忽略 inactive-text',
            type: 'String | Component',
            values: 'elementPlus内置图标',
            defaultVal: '-',
        },
        {
            params: 'activeColor',
            des: 'on 状态时的背景颜色',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'inactiveColor',
            des: 'off 状态时的背景颜色',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'borderColor',
            des: '开关的边框颜色',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'activeText',
            des: 'switch 的状态为 on 时的文字描述',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'inactiveText',
            des: 'switch 的状态为 off 时的文字描述',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'activeValue',
            des: 'switch的状态为 on 时的值',
            type: 'Boolean | String | Number',
            values: '-',
            defaultVal: 'true',
        },
        {
            params: 'inactiveValue',
            des: 'switch的状态为 off 时的值',
            type: 'Boolean | String | Number',
            values: '-',
            defaultVal: 'true',
        },
        {
            params: 'beforeChange',
            des: 'switch 状态改变前的钩子， 返回 false 或者返回 Promise 且被 reject 则停止切换',
            type: 'Function(value, row)',
            values: '-',
            defaultVal: '-',
        },
    ],
    popover: [
        {
            params: 'trigger',
            des: '触发方式',
            type: 'String',
            values: '"click" | "focus" | "hover" | "contextmenu"',
            defaultVal: '"click"',
        },
        {
            params: 'title',
            des: '浮窗标题',
            type: 'String | Function(row, config)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'defaultText',
            des: 'popover 的文本内容',
            type: 'String | Function(row, config)',
            values: '-',
            defaultVal: '-',
            version: 'v1.0.8',
        },
        {
            params: 'content',
            des: '浮窗内容',
            type: 'String | Function(row, config)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'popoverWidth',
            des: 'Tooltip 的宽度',
            type: 'String, Number',
            values: '-',
            defaultVal: '"auto"',
        },
        {
            params: 'effect',
            des: 'Tooltip 主题',
            type: 'String',
            values: '"dark" | "light"',
            defaultVal: '"light"',
        },
        {
            params: 'placement',
            des: '出现位置',
            type: 'String',
            values: '"top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end"',
            defaultVal: '"top-start"',
        },
        {
            params: 'disabled',
            des: '是否禁用',
            type: 'Boolean | Function(row, config)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'popperClass',
            des: '为 popper 添加类名',
            type: 'String | Function(row, config)',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'component',
            des: 'component 可以自定义触发 popper 的组件类型及配置；默认使用 el-tag',
            type: 'Object',
            values: '{ name: "组件标签", ...标签对应的属性 }',
            defaultVal: '{ name: "el-tag" }',
        },
    ],
    clickInput: [
        {
            params: 'inputType',
            des: '输入框的类型',
            type: 'String',
            values: '"text" | "textarea"',
            defaultVal: '"text"',
        },
        {
            params: 'maxlength',
            des: '最大输入长度',
            type: 'Number',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'showWordLimit',
            des: '是否显示统计字数',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'false',
        },
        {
            params: 'placeholder',
            des: '输入框占位文本',
            type: 'String',
            values: '-',
            defaultVal: '"请输入"',
        },
        {
            params: 'clearable',
            des: '是否显示清除按钮，只有当 inputType 为 text 时生效',
            type: 'Boolean',
            values: 'true | false',
            defaultVal: 'true',
        },
        {
            params: 'size',
            des: '输入框尺寸',
            type: 'String',
            values: '\'large\' | \'default\' | \'small\'',
            defaultVal: '"default"',
        },
        {
            params: 'prefixIcon',
            des: '自定义前缀图标',
            type: 'String | Component',
            values: 'elementPlus内置图标',
            defaultVal: '-',
        },
        {
            params: 'suffixIcon',
            des: '自定义后缀图标',
            type: 'String | Component',
            values: 'elementPlus内置图标',
            defaultVal: '-',
        },
        {
            params: 'rows',
            des: '输入框行数，仅 type 为 "textarea" 时有效',
            type: 'Number',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'beforeConfirm',
            des: '点击提交前的回调函数， 返回 false 或者返回 Promise 且被 reject 则取消修改',
            type: 'Function(value, row)',
            values: '-',
            defaultVal: '-',
        },
    ],
};

const getDescribleData = (type = 'common') => configs[type];

export default getDescribleData;
